#include "lua_c_api/include/lua.hpp"
#include "reaper_plugin/reaper_plugin.h"

int pushmidi_Input(lua_State *L, midi_Input *p);
//midi_Input *tomidi_Input(lua_State *L, int idx);

int pushmidi_Output(lua_State *L, midi_Output *p);
//midi_Output *tomidi_Output(lua_State *L, int idx);

int pushMIDI_eventlist(lua_State *L, MIDI_eventlist *p);
//MIDI_eventlist *toMIDI_eventlist(lua_State *L, int idx);

int pushMIDI_event_t(lua_State *L, MIDI_event_t *p);

void setupmidi_Input(lua_State *L);
void setupmidi_Output(lua_State *L);
void setupMIDI_eventlist(lua_State *L);

/*
	A "ReaperMidiEventList" is an STL-<vector>-backed
	subclass of MIDI_eventlist
*/

#include <vector>
using namespace std;

class ReaperMidiEventList  : MIDI_eventlist
{
private:
	vector<MIDI_event_t *>	events;
public:
  virtual void AddItem(MIDI_event_t *evt); // puts the item in the correct place
  virtual MIDI_event_t *EnumItems(int *bpos); 
  virtual void DeleteItem(int bpos);
  virtual int GetSize(); // size of block in bytes
  virtual void Empty();
};
